perm filename PIXNIC.SAI[VIS,HPM]2 blob sn#127057 filedate 1974-10-28 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	REQUIRE "PIXSUB.REL[VIS,HPM]" LOAD_MODULE
C00008 ENDMK
C⊗;
REQUIRE "PIXSUB.REL[VIS,HPM]" LOAD_MODULE;
EXTERNAL PROCEDURE MAKTAB(REFERENCE INTEGER PICTURE);
EXTERNAL INTEGER PROCEDURE PIXEL(REFERENCE INTEGER PIX; INTEGER I,J);
EXTERNAL PROCEDURE PUTEL(REFERENCE INTEGER PIX; INTEGER I,J,VALUE);

INTEGER PROCEDURE PFLDIM(STRING FILNAM);
 BEGIN
 INTEGER XXCOUNT,XXBRCHAR,XXEOF,XXPICLOC; BOOLEAN XXFLAG;
 INTEGER PCLN,PCWD,PCBY,PCBYA,LNWD,LNBY,LNBYA,WDBY,WDBI,BYBI;
 INTEGER ARRAY BUF[0:'177];
 OPEN(10,"DSK",'10,2,0,XXCOUNT,XXBRCHAR,XXEOF);
 LOOKUP(10,FILNAM,XXFLAG);
 IF XXFLAG THEN
  BEGIN
  CLOSE(10);
  RETURN(0);
  END
 ELSE
  BEGIN
  ARRYIN(10,BUF[0],'200); CLOSE(10);
  IF BUF[0]≠-1 ∨ BUF[7]=0 THEN RETURN(0);
  BYBI←BUF[1];
  LNBY←BUF[6]-BUF[5]+1;
  PCLN←BUF[4]-BUF[3]+1;
  LNWD←BUF[2];
  LNBYA←LNWD*(36%BYBI);
  PCWD←LNWD*PCLN;
  XXPICLOC←(BUF[7] LAND '777777)-'200;
  RETURN(12+PCLN+LNBYA+PCWD);
  END;
 END;

INTEGER PROCEDURE GETPFL(STRING FILNAM; REFERENCE INTEGER PICTURE);
 BEGIN
 INTEGER XXCOUNT,XXBRCHAR,XXEOF,XXPICLOC; BOOLEAN XXFLAG;
 INTEGER PCLN,PCWD,PCBY,PCBYA,LNWD,LNBY,LNBYA,WDBY,WDBI,BYBI;
 INTEGER I,L;
 INTEGER ARRAY BUF[0:'177];
 OPEN(10,"DSK",'10,2,0,XXCOUNT,XXBRCHAR,XXEOF);
 LOOKUP(10,FILNAM,XXFLAG);
 IF XXFLAG THEN
  BEGIN
  CLOSE(10);
  RETURN(0);
  END
 ELSE
  BEGIN
  ARRYIN(10,BUF[0],'200);
  IF BUF[0]≠-1 ∨ BUF[7]=0 THEN RETURN(0);
  L←LOCATION(PICTURE);
  MEMORY[L+9]←BYBI←BUF[1];
  MEMORY[L+5]←LNBY←BUF[6]-BUF[5]+1;
  MEMORY[L+0]←PCLN←BUF[4]-BUF[3]+1;
  MEMORY[L+4]←LNWD←BUF[2];
  MEMORY[L+7]←WDBY←36%BYBI;
  MEMORY[L+6]←LNBYA←LNWD*WDBY;
  MEMORY[L+1]←PCWD←PCLN*LNWD;
  MEMORY[L+2]←PCBY←PCLN*LNBY;
  MEMORY[L+3]←PCBYA←PCLN*LNBYA;
  MEMORY[L+8]←WDBI←WDBY*BYBI;
  MEMORY[L+10]←12+PCLN+L;
  MAKTAB(PICTURE);
  XXPICLOC←(BUF[7] LAND '777777)-'200;
  FOR I←1 STEP 1 UNTIL XXPICLOC DO WORDIN(10);
  ARRYIN(10,MEMORY[L+12+PCLN+LNBYA],PCWD);
  CLOSE(10);
  RETURN(12+PCLN+LNBYA+PCWD);
  END;
 END;


INTEGER PROCEDURE PIXDIM(INTEGER HEIGHT,WIDTH,BITS);
 BEGIN
 INTEGER PCLN,PCWD,PCBY,PCBYA,LNWD,LNBY,LNBYA,WDBY,WDBI,BYBI;
 INTEGER L;
 BYBI←BITS;
 LNBY←WIDTH;
 PCLN←HEIGHT;
 WDBY←36%BYBI;
 LNWD←(LNBY+WDBY-1)%WDBY;
 LNBYA←LNWD*WDBY;
 PCWD←PCLN*LNWD;
 RETURN(12+PCLN+LNBYA+PCWD);
 END;

INTEGER PROCEDURE MAKPIX(INTEGER HEIGHT,WIDTH,BITS; REFERENCE INTEGER PICTURE);
 BEGIN
 INTEGER PCLN,PCWD,PCBY,PCBYA,LNWD,LNBY,LNBYA,WDBY,WDBI,BYBI;
 INTEGER I,L;
 L←LOCATION(PICTURE);
 MEMORY[L+9]←BYBI←BITS;
 MEMORY[L+5]←LNBY←WIDTH;
 MEMORY[L+0]←PCLN←HEIGHT;
 MEMORY[L+7]←WDBY←36%BYBI;
 MEMORY[L+4]←LNWD←(LNBY+WDBY-1)%WDBY;
 MEMORY[L+6]←LNBYA←LNWD*WDBY;
 MEMORY[L+1]←PCWD←PCLN*LNWD;
 MEMORY[L+2]←PCBY←PCLN*LNBY;
 MEMORY[L+3]←PCBYA←PCLN*LNBYA;
 MEMORY[L+8]←WDBI←WDBY*BYBI;
 MEMORY[L+10]←12+PCLN+L;
 MAKTAB(PICTURE);
 RETURN(12+PCLN+LNBYA+PCWD);
 END;
 
INTEGER PROCEDURE PUTPFL(REFERENCE INTEGER PICTURE; STRING FILNAM);
 BEGIN
 INTEGER XXCOUNT,XXBRCHAR,XXEOF,XXPICLOC; BOOLEAN XXFLAG;
 INTEGER PCLN,PCWD,PCBY,PCBYA,LNWD,LNBY,LNBYA,WDBY,WDBI,BYBI;
 INTEGER I,L;
 INTEGER ARRAY BUF[0:'177];
 OPEN(10,"DSK",'10,0,2,XXCOUNT,XXBRCHAR,XXEOF);
 ENTER(10,FILNAM,XXFLAG);
 IF XXFLAG THEN
  BEGIN
  CLOSE(10);
  RETURN(0);
  END
 ELSE
  BEGIN
  L←LOCATION(PICTURE);
  BUF[0]←-1;
  BUF[1]←BYBI←MEMORY[L+9];
  BUF[2]←LNWD←MEMORY[L+4];
  BUF[3]←1; BUF[4]←PCLN←MEMORY[L+0];
  BUF[5]←1; BUF[6]←LNBY←MEMORY[L+5];
  BUF[7]←((-(PCWD←MEMORY[L+1])) LSH 18) LOR '200;
  WDBY←36%BYBI;
  LNWD←(LNBY+WDBY-1)%WDBY;
  LNBYA←LNWD*WDBY;
  ARRYOUT(10,BUF[0],'200);
  ARRYOUT(10,MEMORY[L+12+PCLN+LNBYA],PCWD);
  CLOSE(10);
  RETURN(12+PCLN+LNBYA+PCWD);
  END;
 END;


DEFINE PCLN=0;
DEFINE PCWD=1;
DEFINE PCBY=2;
DEFINE PCBYA=3;
DEFINE LNWD=4;
DEFINE LNBY=5;
DEFINE LNBYA=6;
DEFINE WDBY=7;
DEFINE WDBI=8;
DEFINE BYBI=9;
DEFINE BPTAB=10;
DEFINE LINTAB=11;